let flag: boolean = true;

// String aa=1;
// Boolean aa=true

flag = false;

// flag = 1; 报错

// 自动推断 变量的类型
let isMe = true;
// isMe
// isMe = "";

let age: number = 1;

let username: string = "hel";
// let username: string = "hel";

let a1: undefined = undefined;
// a1 = 1;
let a2: null = null;
// a2 = ''

// age = a2;
// let a = 1;

// any
// let a: any = 1;
// a = 1;
// a = "2";

// function box(arg: any) {
//   return arg / 1;
// }

function box(arg: unknown) {
  if (typeof arg == "number") {
    return arg / 1;
  } else if (typeof arg == "string") {
  }

  //   return (arg as number) / 1;
}

// function sum(): void {}
function sum(): number {
  return 1;
}

//arr是一个数组，并且 数组元素是数字类型
let arr: number[] = [1, 2, 3];

//arr是一个数组，并且 数组元素是数字类型
let arr2: Array<number> = [1, 3, 4, 5];

// 元组类型
let arr3: [string, number] = ["a", 1];
let arr4: [number, string] = [1, "22"];

// arr2 = null;
// a = null;
let bbb = 1;
bbb = null;

// function test(a: number, b: number): number {
//   return a + b;
// }

function test(a: number, b: number) {
  return a + b;
}

test(1, 2);
// test(1, "2");

let fn = (a: number, b: object): number => {
  return a + 1;
};

//可选参数
let fn2 = (a: number, b?: number) => {
  return a + b;
};
fn2(1);
fn2(1, 2);

// function add(x: number, y: number = 100): number {
//   return x + y;
// }

// add = 1;
// (a: number, b: number) => number  表示 add2 是一个函数类型
// let add2: (a: number, b: number) => number = add;

// 定义 add  函数类型
// 函数的重载
function add(x: number[]): number;
function add(x: string[]): string;
function add(x: string[], y: string[]): string;

function add(x: any[], y?: any[]): any {
  if (typeof x == "number") {
    return x + 1;
  } else if (typeof x == "string") {
    return x + "aaa";
  }
}
add([1, 2, 3]);
add(["22", "22"]);
